//
//  RootViewController.swift
//  新浪微博
//
//  Created by 刘广东 on 16/2/22.
//  Copyright © 2016年 LGD. All rights reserved.
//

import UIKit
import HMRefresh

class RootViewController: UIViewController {
    
    // MARK: - 公共属性
    
    /// 表格视图
    var tabview: UITableView?
    
    /// 刷新控件
    var refreshControl: HMRefreshControl?
    
    /// 访客视图 - 如果用户登录成功，就不需要创建访客视图
    var visitorView: VisitorView?
    
    // MARK : - 视图生命周期`
    override func loadView() {
        
        //1.创建视图
        view = UIView()
        
        //2.用户登录显示 tableView ／ 否则显示访客视图
        UserAccount.sharedUserAccount.isLogin ? setupTabView() : setupVisitorView()
        
        //输出路径方便修改登录信息plist文件
        if UserAccount.sharedUserAccount.isLogin {
            
          print(NSHomeDirectory())
        }
    }
    
    
    
    /// 加载数据 - 真正的数据加载，应该放在子类中实现
    func loadData() {
        
    }
    
    /// 登录成功监听方法
    @objc private func loginSuccessed() {
        view = nil
        
        // 注销通知
        NSNotificationCenter.defaultCenter().removeObserver(self, name: JmWeiBoLoginSuccessedNotification, object: nil)
    }

    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 如果没有登录注册通知
        if UserAccount.sharedUserAccount.isLogin {
            loadData()
        } else {
            NSNotificationCenter.defaultCenter().addObserver(
                self,
                selector: "loginSuccessed",
                name: JmWeiBoLoginSuccessedNotification,
                object: nil)

        
    }
    
}
}

// MARK:- VisitorViewDelegate
extension RootViewController: VisitorViewDelegate {
    
    /// 访客视图注册
    
    
    func visitorViewDidRegister() {
        
        print("注册")
        
    }
    /// 访客视图登录
    func visitorViewDidLogin() {
        
        let oauthVC = OAuthViewController()
        
        let nav = UINavigationController(rootViewController: oauthVC)
        
        //加载授权界面
        presentViewController(nav, animated: true, completion: nil)
        
        print("登录")
    }
    
    
}
// MARK: - 设置界面
extension RootViewController {
    
    
    // 设置访客视图
    private func setupVisitorView() {
        visitorView = VisitorView()
        view.addSubview(visitorView!)
        
        //自动布局
        view.snp_makeConstraints { (make) -> Void in
            make.edges.equalTo(view)
        }
        // 设置代理
        visitorView?.delegate = self
        
        view = visitorView
        
        // 设置状态栏按钮 - 如果换行参数，一定保证一个参数一行
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: UIBarButtonItemStyle.Plain, target: self, action: "visitorViewDidRegister")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: UIBarButtonItemStyle.Plain, target: self, action: "visitorViewDidLogin")
    }
    
    /// 设置表格视图
    private func setupTabView() {
        
        
        tabview = UITableView(frame: CGRectZero, style: UITableViewStyle.Plain)
        view.addSubview(tabview!)
        // 自动布局－让 子视图和根视图同样大小！
        tabview?.snp_makeConstraints { (make) -> Void in
            make.edges.equalTo(view)
            
        }
        tabview?.delegate = self
        tabview?.dataSource = self
        
    }
    
    /// 设置刷新控件
    /// 需要刷新控件的子控制器单独调用 `setupRefreshControl`
    /// 私有函数不能被子类`继承`
    func setupRefreshControl() {
        
        //如果tabview不存在,直接返回
        guard let tabview = tabview else{
            
            return
        }
        
         // 默认没有刷新控件，但是，如果 `刷新控件` 已经存在，不需要再次添加
        if refreshControl != nil {
            
            return
        }
        refreshControl = HMRefreshControl()
        //添加下拉刷新控件
        tabview.addSubview(refreshControl!)
        
        //设置下拉刷新视图
        refreshControl!.pulldownView = PulldownRefreshView.refreshView()
        refreshControl!.normalString = "下拉起飞"
        refreshControl!.pullingString = "放开弹射起飞"
        refreshControl!.refreshingString = "正在弹射"
        refreshControl!.lastRefreshString = "末次"
        
        // 设置刷新控件的监听方法
        refreshControl!.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
    }
}

extension RootViewController :UITableViewDelegate,UITableViewDataSource {
    
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
}